package p22_获取参数名;

import org.springframework.core.LocalVariableTableParameterNameDiscoverer;

import java.util.Arrays;

public class _3_asm获取方法参数 {
    public static void main(String[] args) throws NoSuchMethodException {
        /**
         * LocalVariableTableParameterNameDiscoverer(ParameterNameDiscoverer实现类)封装了asm来获取本地变量表的参数名
         * 这种可以获取加了-g参数编译出的方法参数名，但无法获取加了-parameters参数的方法参数名
         * Spring中的DefaultParameterNameDiscoverer(ParameterNameDiscoverer的另一个实现类)，既可以获取加了-parameters参数的方法参数名，也可以获取加了-g的方法参数名
         * 这就是为什么在p21中，需要加一行代码"parameter.initParameterNameDiscovery(new DefaultParameterNameDiscoverer());"，不加就获取不到参数
         * 本地变量表，无法保存接口的方法参数名
         */
        LocalVariableTableParameterNameDiscoverer discoverer = new LocalVariableTableParameterNameDiscoverer();
        String[] foos = discoverer.getParameterNames(Bean.class.getMethod("foo", String.class, Integer.class));
        System.out.println(Arrays.toString(foos));
    }

    static class Bean {
        public void foo(String name, Integer age) {
        }
    }
}
